"""
@author: Shizuku
@file: 2023-02-09-practice.py
@time: 2023/2/9 23:28
"""
# 1、CPython、IPython、Ironpython、Jython、PyPy。CPython编译执行，PyPy解释执行。
# 2、python2中print是一个语句，python3里，print()是一个函数；
#    python2有非浮点数准备的int和long类型，在python3里，只有一种整数类型int；
#    Python2默认ASCII编码方式，Python3默认采用了UTF - 8编码；
#    创建类时，python2分为经典类和新式类，python3中全部是新式类；
#    python2中有Unicode字符串和非Unicode字符串，Python3中只有Unicode字符串；
#    python2有input()和raw_input(), python3只有input；
#    Python2中，字典对象has_key()方法测试字典是否包含指定的键。python3不再支持这个方法，需要使用in。
# 3、list是有序的，set是无序的
# 4、作用：不改变函数或者类的原代码基础上，为其添加额外的功能。统计函数运行时间、插入日志等。两层函装饰器不带参数，三层装饰器带参数。函数、类。
# 5、数组和链表，append，字典是哈希表实现的。
# 6、生成器内部的代码执行到yield会返回，返回的内容为yield后的表达式。数列的数据规模巨大且数列有规律，但是依靠列表推导式描述不出来。
# 7、异常捕获用在代码不确定是否能执行的地方，可以判断错误，使用的语句为try，expect。常用语句：AssertionError、IndentationError等。
# 8、local > enclosin >global > built - in
# 9、先查看内存中已经加载好的模块，没有加载到内存的模块，通过sys.path的路径一个个去找。绝对导入以执行文件的sys.path为起始点开始导入，相对导入参照当前所在文件的文件夹为起始开始查找
# 10、.__name__变量的值就是: __main__。可以通过__name__来隐藏不需要执行的代码，并使它们不被执行。__file__是模块(模块对象)的属性，共享库文件的路径名
# 11、以__开头和结尾的方法，统称为魔术方法。__new__ 、__init__、__del__、__call__、__str__等。
# 12、c3算法。
# 13、确定__init__.py文件，创建setup.py文件，执行命令pythonsetup.py build进行打包，执行命令pythonsetup.py sdist进行分配，测试安装

# 14、
# import re
#
# msg = """python
# python1
# ptyhon2
# pppython
#
# wod
#
# hello python
#
# #sdfafd"""
#
# result = re.compile(r"^\s|\s+(?=\s)|\s$")
# print(result.findall(msg))
#
# m = re.compile(r'#.*')
# print(m.findall(msg))


# 15、
# class Queue(object):
#     """队列"""
#
#     def __init__(self):
#         self.items = []
#
#     def is_empty(self):
#         return self.items == []
#
#     def enqueue(self, item):
#         """进队列"""
#         self.items.insert(0, item)
#
#     def dequeue(self):
#         """出队列"""
#         return self.items.pop()
#
#     def size(self):
#         """返回大小"""
#         return len(self.items)
#
#
# if __name__ == "__main__":
#     q = Queue()
#     q.enqueue("hello")
#     q.enqueue("world")
#     q.enqueue("python")
#     print(q.size())
#     print(q.dequeue())
#     print(q.dequeue())
#     print(q.dequeue())
#     print(q.is_empty())


# 16、
# import os
#
#
# def tree(dir, depth):
#     if depth == 0:
#         print(dir)
#     for element in os.listdir(dir):
#         print(" |     " * depth, "|----" + element)
#         path = dir + "//" + element
#         if os.path.isdir(path):
#             tree(path, depth + 1)
#
#
# tree("E:/pyProject/practice", 0)

# 17、
# import requests
# result = requests.get("https://n.sinaimg.cn/finance/transform/590/w240h350/20230209/5f00-2f51d9e9fc0569fe3726e427e1113042.png")
# print(dir(result))
# print(result.content)
# with open("picture.jpg", "wb") as fp:
#     fp.write(result.content)

# 18、内存管理：以引用计数为主,分代回收和标记清除为辅的回收方式。
#     浅拷贝之后的数据改变，可能会影响原来的数据，深拷贝之后的数据改变，不会影响原来的数据
# 19、删除文件  文件名.truncate()
# 创建文件  变量名= open("文件名","w+")
# 写入文件  文件名.write()
# 读取文件  文件名.read()  文件名.readlines()
# 20、assert关键字使您可以测试代码中的条件是否返回True，否则程序将引发AssertionError。可以编写一条代码返回False时输出的消息。